package org.zoomdev.zoom.common.utils;

public final class NameCaseConverter {


    /**
     * 将字符串首字母大写，其余字母保持不变
     *
     * @param input 输入字符串
     * @return 首字母大写的字符串，如果输入为null或空则返回原值
     */
    public static String capitalizeFirstLetter(String input) {
        if(input == null || input.isEmpty()){
            throw new IllegalArgumentException("输入必须有值");
        }

        return input.substring(0, 1).toUpperCase() + input.substring(1);
    }

    /**
     * 下划线变成驼峰
     *
     * @return 驼峰
     */
    public static String toCamelCase(String input) {
        if(input == null || input.isEmpty()){
            throw new IllegalArgumentException("输入必须有值");
        }
        input = input.toLowerCase();
        String[] names = input.split("_");
        StringBuilder result = new StringBuilder();
        int index = 0;
        for (String string : names) {
            if (string.isEmpty()) {
                continue;
            }
            if (index > 0) {
                char[] arr = string.toCharArray();
                arr[0] = Character.toUpperCase(arr[0]);
                result.append(arr);
            } else {
                result.append(string);
            }
            ++index;
        }
        return result.toString();
    }

    /**
     * 驼峰式变成下划线(大写）
     *
     * @param input  输入
     * @return 下划线
     */
    public static String toSnakeCase(String input) {
        if(input == null || input.isEmpty()){
            throw new IllegalArgumentException("输入必须有值");
        }
        //反向命名
        char[] arr = input.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (char ch : arr) {
            if (Character.isUpperCase(ch)) {
                sb.append("_");
                sb.append(ch);
            } else {
                sb.append(Character.toUpperCase(ch));
            }
        }

        return sb.toString();
    }
}
